#!/bin/bash

R="\\033[1;31m"
V="\\033[1;32m"
J="\\033[1;33m"
N="\\033[0;39m"

if [ $USER != "root" ]; then
	echo -n "$R"
	echo -n "Doit être lancé en tant que root."
	echo "$N"
	exit 1
fi

LOG_FILE=./ldap-install-`date +"%Y%m%d%H%M%S"`.log

touch $LOG_FILE

# Vérification de la présence de la config du backend
echo -n "Configuration du backend LDAP "

if [ -r "ldap-backend.ldif-dist" ]; then
	echo "présente."
else
	echo "absente."
	exit 1
fi

# Vérification de la présence de la config du frontend
echo -n "Configuration du frontend LDAP "

if [ -r "ldap-frontend.ldif-dist" ]; then
	echo "présente."
else
	echo "absente."
	exit 1
fi

# Vérification du FQDN du serveur.
if [[ "`hostname -f | sed 's/\./ /g' | wc -w`" > 2 ]]; then
        FQDN=`hostname -f`
	echo "Le FQDN de ce serveur est $FQDN."
else
	echo "Impossible de déterminer le FQDN de ce serveur."
	exit 1
fi

# Transformation du FQDN en chaîne DC LDAP.
#@todo: Déterminer le LDAPDN à partir du FQDN
#@todo: Personnaliser aussi les champs o et dc de la racine LDAP 
LDAPDN="dc=meziere,dc=eu"
LDAPADM="admin"
LDAPPWD="1234"

# Installation d'OpenLDAP
echo -n "Installation d'OpenLDAP : "

apt-get install --quiet --yes slapd ldap-utils &>> $LOG_FILE

if [ "$?" = 0 ]; then
	echo -e "$V OK $N"
else
	echo -e "$R KO $N"
	exit 1
fi 

# Ajout des schémas nécessaires
echo "Import des chémas LDAP nécessaires."
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif &>> $LOG_FILE
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif &>> $LOG_FILE
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif &>> $LOG_FILE

# Mise à jour de la config du backend et import dans LDAP.
echo "Mise à jour et import de la configuration du backend LDAP."
cp ldap-backend.ldif-dist ldap-backend.ldif
sed -i "s/LDAPDN/$LDAPDN/g" ldap-backend.ldif
sed -i "s/LDAPADM/$LDAPADM/g" ldap-backend.ldif
sed -i "s/LDAPPWD/$LDAPPWD/g" ldap-backend.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f ldap-backend.ldif >> $LOG_FILE

# Mise à jour de la config du frontend et import dans LDAP.
echo "Mise à jour et import de la configuration du frontend LDAP."
cp ldap-frontend.ldif-dist ldap-frontend.ldif
sed -i "s/LDAPDN/$LDAPDN/g" ldap-frontend.ldif
sed -i "s/LDAPADM/$LDAPADM/g" ldap-frontend.ldif
sed -i "s/LDAPPWD/$LDAPPWD/g" ldap-frontend.ldif
ldapadd -x -D cn=$LDAPADM,$LDAPDN -w $LDAPPWD -f ldap-frontend.ldif >> $LOG_FILE

# Installation des packages d'authentification système.
echo "Installation de libnss-ldap : "
apt-get install --quiet --yes libnss-ldap

if [ "$?" = 0 ]; then
	echo -e "$V OK $N"
else
	echo -e "$R KO $N"
	exit 1
fi 

# cette commande lance "dpk-reconfigure ldap-auth-config". Il faut installer le package manuellement (via dpkg ?) puis reconfigurer manuellement aussi.

# Activation de l'authentification LDAP.
# @todo: Trouver comment faire ça manuellement.
auth-client-config -t nss -p lac_ldap

# Reconfiguration du système.
pam-auth-update

# Ajout de la création du homedir à la volée.
echo "session required pam_mkhomedir.so" >> /etc/pam.d/common-session

# Installation des scripts de gestion des utilisateurs.
echo "Installation des ldapscripts : "
apt-get install --quiet --yes ldapscripts

if [ "$?" = 0 ]; then
	echo -e "$V OK $N"
else
	echo -e "$R KO $N"
	exit 1
fi 

# Configuration de ldapscripts
cp /etc/ldapscripts/ldapscripts.conf ./etc-ldapscripts-ldapscripts.conf.bak
sed -i "s/BINDDN=\"cn=admin,dc=example,dc=com\"/BINDDN=\"cn=$LDAPADM,$LDAPDN\"/" /etc/ldapscripts/ldapscripts.conf
sed -i "s/SUFFIX=\"dc=example,dc=com\"/SUFFIX=\"$LDAPDN\"/" /etc/ldapscripts/ldapscripts.conf
sed -i "s/GSUFFIX=\"ou=Groups\"/GSUFFIX=\"ou=Groupes\"/" /etc/ldapscripts/ldapscripts.conf
sed -i "s/USUFFIX=\"ou=Users\"/USUFFIX=\"ou=Utilisateurs\"/" /etc/ldapscripts/ldapscripts.conf
sed -i "s/MSUFFIX=\"ou=Machines\"/MSUFFIX=\"ou=Machines\"/" /etc/ldapscripts/ldapscripts.conf

# Stockage du password admin pour ldapscripts
sh -c "echo -n '$LDAPPWD' > /etc/ldapscripts/ldapscripts.passwd"
chmod 400 /etc/ldapscripts/ldapscripts.passwd


